home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_400 / 422_02 / dosutil / memsave.c < prev    next >
C/C++ Source or Header  |  1994-03-20  |  1KB  |  43 lines

  1. /*
  2.  * Save memory image to a disk file
  3.  *
  4.  * Copyright 1991-1994 Dave Dunfield
  5.  * All rights reserved.
  6.  *
  7.  * Permission granted for personal (non-commercial) use only.
  8.  *
  9.  * Compile command: cc memsave -fop
  10.  */
  11. #include <stdio.h>
  12.  
  13. main(argc, argv)
  14.     int argc;
  15.     char *argv[];
  16. {
  17.     unsigned seg, addr, size;
  18.     char buffer[1024];
  19.     FILE *fp;
  20.  
  21.     if(argc != 3)
  22.         abort("Use: memsave <segment>:<offset>,<size> <filename>");
  23.  
  24.     /* Process command line args and extract seg, addr, size + filename */
  25.     if(sscanf(argv[1], "%x:%x,%u", &seg, &addr, &size) != 3)
  26.         abort("Invalid segment:offset or size");
  27.     fp = fopen(argv[2], "wvqb");
  28.  
  29.     /* Copy and save memory 1 buffer at a time */
  30.     while(size > sizeof(buffer)) {
  31.         copy_seg(get_ds(), buffer, seg, addr, sizeof(buffer));
  32.         fwrite(buffer, sizeof(buffer), fp);
  33.         addr += sizeof(buffer);
  34.         size -= sizeof(buffer); }
  35.  
  36.     /* Copy and save last partial buffer if any */
  37.     if(size) {
  38.         copy_seg(get_ds(), buffer, seg, addr, size);
  39.         fwrite(buffer, size, fp); }
  40.  
  41.     fclose(fp);
  42. }
  43.